package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.ValorFlexibleVO;
import com.cs.beneficios.common.ConnectionFactory;
//import java.sql.BatchUpdateException;
import java.sql.Connection;
//import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
//import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
//import java.util.Vector;
//import java.sql.PreparedStatement;
//import java.util.Iterator;

import com.cs.beneficios.business.model.VflexVO;

public class VflexDAO {

	/**
	 * Conexion a la base de datos.
	 */
	private Connection conn = null;
	private ConnectionFactory cf;

	/**
	 * Constructor que inicializa la conexion con la base de datos.
	 * 
	 * @param conn
	 *            Conexion con la base de datos.
	 */
	public VflexDAO(ConnectionFactory cf) {
		this.cf = cf;
		try {
			this.conn = this.cf.getConnection();
		} catch (SQLException e) {
		}
	}

	public Collection getVflex(Long codigoTipoVflex) throws SQLException {
		String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "
				+ "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "
				+ "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "
				+ "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "
				+ "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
		if (codigoTipoVflex != null) {
			query += "AND TVFLEX.NOMBRE LIKE '" + codigoTipoVflex + "'"
					+ " order by vflex.descripcion ";
			;
			ResultSet rst = null;
			ArrayList vflex = new ArrayList();
			rst = cf.getRecordsRset(query, null, conn);
			VflexVO valorFlex = null;
			while (rst.next()) {
				valorFlex = new VflexVO();
				valorFlex.setCode(new Long(rst.getLong("CODE")));
				valorFlex.setCodigoVflex(rst.getString("CODIGO_VALOR"));
				valorFlex.setNombreTipoVflex(rst.getString("NOMBRE_VALOR"));
				valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
				valorFlex.setCodigoTipoVflex(new Long(rst
						.getLong("CODE_TIPO_VFLEX")));
				valorFlex
						.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX"));
				vflex.add(valorFlex);
				valorFlex = null;
			}
			rst.close();

			return vflex;
		} else
			return null;
	}

	public Collection getVflex(String nombreTipoVflex) throws SQLException {
		String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "
				+ "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "
				+ "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "
				+ "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "
				+ "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
		if (nombreTipoVflex != null) {
			query += "AND TVFLEX.NOMBRE LIKE UPPER('" + nombreTipoVflex + "')"
					+ " order by vflex.descripcion ";
			;

			// System.out.println(query);
			ResultSet rst = null;
			ArrayList vflex = new ArrayList();
			rst = cf.getRecordsRset(query, null, conn);
			VflexVO valorFlex = null;
			while (rst.next()) {
				valorFlex = new VflexVO();
				valorFlex.setCode(new Long(rst.getLong("CODE")));
				valorFlex.setCodigoVflex(rst.getString("CODIGO_VALOR"));
				// vflVO.setNombreVflex(rst.getString("codvalor")+"~"+rst.getString("descrip"));
				valorFlex.setNombreVflex(rst.getString("CODE") + "~"
						+ rst.getString("DESC_VALOR"));
				valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
				valorFlex.setCodigoTipoVflex(new Long(rst
						.getLong("CODE_TIPO_VFLEX")));
				valorFlex
						.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX"));
				vflex.add(valorFlex);
				valorFlex = null;
			}
			rst.close();

			return vflex;
		} else
			return null;
	}

	public Collection FindCodeValorFlex(String strNombre) throws SQLException {
		String query = "SELECT NOMBRE, DESCRIPCION, CODIGO FROM paoyer.TCS_VALOR_FLEXIBLE ";

		if (strNombre != null && !strNombre.equals("")) {
			query += "WHERE DESCRIPCION LIKE '" + strNombre.trim() + "'";
			ResultSet rst = null;
			ArrayList vflex = new ArrayList();
			// System.out.println("FindCodeValorFlex: " + query);
			rst = cf.getRecordsRset(query, null, conn);
			VflexVO valorFlex = null;
			while (rst.next()) {
				valorFlex = new VflexVO();
				valorFlex.setCode(new Long(rst.getLong("CODIGO")));
				valorFlex.setNombreVflex(rst.getString("NOMBRE"));
				valorFlex.setDescVflex(rst.getString("DESCRIPCION"));
				vflex.add(valorFlex);
				valorFlex = null;
			}
			rst.close();

			return vflex;
		} else
			return null;
	}

	public Collection getVflex(String nombreTipoVflex, int origen)
			throws SQLException {
		String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "
				+ "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "
				+ "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "
				+ "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX "
				+ "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO ";
		if (nombreTipoVflex != null) {
			query += "AND TVFLEX.NOMBRE = '" + nombreTipoVflex + "'"
					+ " order by vflex.descripcion ";
			;
			ResultSet rst = null;
			ArrayList vflex = new ArrayList();
			rst = cf.getRecordsRset(query, null, conn);
			VflexVO valorFlex = null;
			while (rst.next()) {
				valorFlex = new VflexVO();
				valorFlex.setCode(new Long(rst.getLong("CODE")));
				valorFlex.setCodigoVflex(rst.getString("CODIGO_VALOR"));
				// vflVO.setNombreVflex(rst.getString("codvalor")+"~"+rst.getString("descrip"));
				valorFlex.setNombreVflex(rst.getString("NOMBRE_VALOR"));
				valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
				valorFlex.setCodigoTipoVflex(new Long(rst
						.getLong("CODE_TIPO_VFLEX")));
				valorFlex
						.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX"));
				vflex.add(valorFlex);
				valorFlex = null;
			}
			rst.close();

			return vflex;
		} else
			return null;
	}

	public String buscarPadre(String codeHijo) throws SQLException {
		String query = "select codigo from paoyer.tcs_valor_flexible "
				+ "where codigo = "
				+ "(select campo_n1 from paoyer.tcs_valor_flexible where codigo = "
				+ codeHijo + ")";
		// System.out.println(query);
		ResultSet rst = cf.getRecordsRset(query, null, conn);
		if (rst.next()) {
			return rst.getString("codigo");
		} else
			return "";
	}

	public int SearchValorFlex(String strNombre) throws SQLException {
		int retornar = 0;
		String query = "SELECT DESCRIPCION FROM paoyer.TCS_VALOR_FLEXIBLE "
				+ "WHERE DESCRIPCION LIKE '" + strNombre.trim() + "'";
		ResultSet rst = cf.getRecordsRset(query, null, conn);
		if (rst.next()) {
			retornar = 1;
		}
		return retornar;
	}

	public int SearchValorFlex(String strNombre, String strCodigo)
			throws SQLException {
		int retornar = 0;
		String query = "SELECT DESCRIPCION FROM paoyer.TCS_VALOR_FLEXIBLE "
				+ "WHERE UPPER(DESCRIPCION) LIKE '"
				+ strNombre.trim().toUpperCase() + "' "
				+ "AND UPPER(CODIGO_VALOR) LIKE '"
				+ strCodigo.trim().toUpperCase() + "' ";
		ResultSet rst = cf.getRecordsRset(query, null, conn);
		if (rst.next()) {
			retornar = 1;
		}
		return retornar;
	}

	public Collection getVflex(String nombreTipoVflex, String codePadre)
			throws SQLException {
		String query = "SELECT VFLEX.CODIGO CODE, VFLEX.CODIGO_VALOR CODIGO_VALOR, "
				+ "VFLEX.NOMBRE NOMBRE_VALOR, VFLEX.DESCRIPCION DESC_VALOR, "
				+ "TVFLEX.CODIGO CODE_TIPO_VFLEX, TVFLEX.NOMBRE NOMBRE_TIPO_VFLEX "
				+ "FROM paoyer.TCS_VALOR_FLEXIBLE VFLEX, paoyer.TCS_TIPO_VALOR_FLEX TVFLEX, paoyer.TCS_VALOR_FLEXIBLE VFLEXPADRE "
				+ "WHERE TVFLEX.CODIGO = VFLEX.TVF_CODIGO "
				+ "AND VFLEX.CAMPO_N1 = VFLEXPADRE.CODIGO ";
		if (nombreTipoVflex != null && codePadre != null) {
			if (codePadre.equals("18343")) {
				query += " AND VFLEX.CAMPO_N1 = " + codePadre
						+ " order by vflex.descripcion ";

			} else {
				query += " AND TVFLEX.NOMBRE LIKE '" + nombreTipoVflex + "'"
						+ " AND VFLEX.CAMPO_N1 = " + codePadre
						+ " order by vflex.descripcion ";
			}

			ResultSet rst = null;
			ArrayList vflex = new ArrayList();
			// System.out.println(query);
			rst = cf.getRecordsRset(query, null, conn);
			VflexVO valorFlex = null;
			while (rst.next()) {
				valorFlex = new VflexVO();
				valorFlex.setCode(new Long(rst.getLong("CODE")));
				valorFlex.setCodigoVflex(rst.getString("CODIGO_VALOR"));
				valorFlex.setNombreVflex(rst.getString("NOMBRE_VALOR"));
				valorFlex.setDescVflex(rst.getString("DESC_VALOR"));
				valorFlex.setCodigoTipoVflex(new Long(rst
						.getLong("CODE_TIPO_VFLEX")));
				valorFlex
						.setNombreTipoVflex(rst.getString("NOMBRE_TIPO_VFLEX"));
				vflex.add(valorFlex);
				valorFlex = null;
			}
			rst.close();

			return vflex;
		} else
			return null;
	}

	public List getDominio(String tipovfl, String option) throws SQLException {
		int dominio = Integer.parseInt(tipovfl.trim());
		List listaDominio = new LinkedList();

		String strSQL = "SELECT TCS_VALOR_FLEXIBLE.CODIGO CODIGOVFL, TCS_TIPO_VALOR_FLEX.CODIGO TVFCOD, "
				+ "TCS_TIPO_VALOR_FLEX.DESCRIPCION TVFDES, TCS_TIPO_VALOR_FLEX.VIGENCIA TVFVIG, "
				+ "TCS_VALOR_FLEXIBLE.DESCRIPCION VFDES, TCS_VALOR_FLEXIBLE.TVF_CODIGO VFTVFCOD "
				+ "FROM paoyer.TCS_TIPO_VALOR_FLEX, paoyer.TCS_VALOR_FLEXIBLE "
				+ "WHERE TCS_TIPO_VALOR_FLEX.CODIGO="
				+ dominio
				+ " AND "
				+ "TCS_VALOR_FLEXIBLE.TVF_CODIGO=" + dominio + " ";
		if (option.equals("1")) {
			strSQL += " AND TCS_VALOR_FLEXIBLE.VIGENCIA='S'";
		} else {
			strSQL += " AND TCS_VALOR_FLEXIBLE.VIGENCIA='N'";
		}
		strSQL += " ORDER BY CODIGOVFL";
		ResultSet rst = null;
		rst = cf.getRecordsRset(strSQL, null, conn);
		while (rst.next()) {

			ValorFlexibleVO valorfl = new ValorFlexibleVO();

			valorfl.setCodigotvfl(rst.getString("TVFCOD"));
			valorfl.settVFCodigo(rst.getString("VFTVFCOD"));
			valorfl.setDescripciontvfl(rst.getString("TVFDES"));
			valorfl.setDescripcionvf(rst.getString("VFDES"));
			valorfl.setVigenciatvfl(rst.getString("TVFVIG"));
			valorfl.setCodigovfl(rst.getString("CODIGOVFL"));

			listaDominio.add(valorfl);
			valorfl = null;
		}

		return listaDominio;

	}

	public int ActValorFlex(String strCodVFL) throws SQLException {

		int iCodvfl = Integer.parseInt(strCodVFL.trim());

		String query = "UPDATE paoyer.TCS_VALOR_FLEXIBLE SET "
				+ "VIGENCIA = 'S' " + "WHERE CODIGO=" + iCodvfl + " ";
		int ActualizoCorrectamente = cf.execSql(query, null, conn);
		return ActualizoCorrectamente;

	}

	public Connection getConn() {
		return conn;
	}
}